/**
 * 自动生成 MerRole
 * 
 * Public/js/backend/mer_role.js
 * Zix @ 2015-06-30
 */

var MerRole = {
  config: {
  },
  init: function (config) {
    var _this = this;
    $.extend(_this.config, config);
    Layout.set_menu_select(_this.config.menu_id);

    loading();
    _this.init_btn();
    _this.init_grid();
  },
    
  init_btn: function () {
    var _this = this;

    //查询按钮
    $(document).on('click', '#search_btn', function (e) {
      e.preventDefault();
      var query_param = $('#data_table').TableGrid('getparam');
      query_param.sys_type = $('#sys_type').val();
      $('#data_table').TableGrid('param', query_param);
      $('#data_table').TableGrid('reload');
    });
    
    //打开添加窗口
    $(document).on('click', '.load_add_modal_btn', function (e) {
      e.preventDefault();

      $('#submit_form').attr('action', _this.config.create_url);
      $('#submit_form')[0].reset();
      fillform( $('#submit_form') , _this.config.row );
      
      $('#action_label').html('新增');
      $('#add_edit_modal').modal('show');
    });

    //打开编辑窗口
    $(document).on('click', '.edit_btn', function (e) {
      e.preventDefault();
      
      var index = $('.edit_btn').index( $(this) );
      var data = $('#data_table').TableGrid('getrow' , index );

      fillform( $('#submit_form') , data );
      $('#submit_form').attr('action', _this.config.update_url + '/' + data['id'] );
     
      $('#action_label').html('编辑');
      $('#add_edit_modal').modal('show');
    });

    //提交
    $(document).on('click', '#submit_btn', function (e) {
      e.preventDefault();

      var _thisbtn = $(this);
      var url = $('#submit_form').attr('action');
      var data = $('#submit_form').serializeObject();

      if (validform($('#submit_form'))) {
        data.mer_id = _this.config.mer_id ;
        $.post(url, data, function (ret) {
          tips(ret.info) ;
          if (ret.status) {
            $('#add_edit_modal').modal('hide');
            var query_param = $('#data_table').TableGrid('getparam');
            $('#data_table').TableGrid('param' , query_param);
            $('#data_table').TableGrid('reload');
          }
        });
      }
    });
    
    //单个删除按钮
    $(document).on('click', '.del_one_btn', function (e) {
      e.preventDefault();
      var index = $('.del_one_btn').index( $(this) );
      var data = $('#data_table').TableGrid('getrow' , index);
      _this.config.del_id = data['id'];
      _this.del_data();
    });
    
    //打开权限窗口
    $(document).on('click', '.permission_btn', function (e) {
      e.preventDefault();
      
      var index = $('.permission_btn').index( $(this) );
      var data = $('#data_table').TableGrid('getrow' , index );
      $('#permission_body').empty();
      _this.config.role_id = data.id ;
      var url = _this.config.get_permission_url ;
      var post_data = {
        role_id : data.id ,
        sys_type : _this.config.sys_type ,
      }
      $.post(url , post_data , function( ret ){
        $('#permission_label').html('['+ data.name +']的权限');
        $('#permission_modal').modal('show');
        $('#permission_body').html(ret.html);
        
        _this.init_permission( ret.p_data ) ;
      });
    });
    
    //功能权限全选或取消
    $(document).on('click' , '.func' , function( e ){
      e.preventDefault();
      
      var this_node = $(this).parent('.func-node');
      var opt = this_node.find('.func-opt') ;
      var opt_i = this_node.find('.func-opt > i') ;

      if ( $(this).hasClass('disabled') || $(this).hasClass('notall') ) {
        //全选
        $(this).removeClass('active notall disabled').addClass('active');
        opt.removeClass('active notall disabled').addClass('active');
        opt_i.removeClass('fa-square-o').addClass('fa-check-square-o');
        
        //将下级权限置为可查看
        _this.set_sub_opt_check(this_node);
      } else {
        //全不选
        $(this).removeClass('active notall disabled').addClass('disabled');
        opt.removeClass('active notall disabled').addClass('disabled');
        opt_i.removeClass('fa-check-square-o').addClass('fa-square-o');
        
        //将下级权限置为全不选
        _this.set_sub_opt_disabled(this_node);
      }
    });
    
    //功能权限单选或取消
    $(document).on('click' , '.func-opt' , function( e ){
      e.preventDefault();
      var this_i = $(this).find('i');
      var this_node = $(this).parents('.func-node');
      
      if ( $(this).hasClass('disabled') ) {
        $(this).removeClass('disabled').addClass('active');
        this_i.removeClass('fa-square-o').addClass('fa-check-square-o');
      } else if ( $(this).hasClass('active') ) {
        $(this).removeClass('active').addClass('disabled');
        this_i.removeClass('fa-check-square-o').addClass('fa-square-o');
      }

      if( $(this).html().indexOf('查看') > 0 ) {
        if ( $(this).hasClass('disabled') ) {
          _this.set_sub_opt_disabled(this_node);
        } else {
          _this.set_sub_opt_check(this_node);
        }
      }
      
      this_node.find('.func').removeClass('active notall disabled');

      if ( this_node.find('.func-opt-row > .active').length == 0 ) {
        this_node.find('.func').addClass('disabled'); //未选择
      } else if ( this_node.find('.func-opt').length ==  this_node.find('.func-opt-row > .active').length ) {
        this_node.find('.func').addClass('active'); //全选
      } else {
        this_node.find('.func').addClass('notall'); //部分选择
      }
    });
    
    //提交权限
    $(document).on('click', '#permission_submit_btn', function (e) {
      e.preventDefault();
      
      var data = {
        role_id : _this.config.role_id ,
        opt_id : new Array() ,
      };
      
      var len = $('.func-opt-row .active').length ;
      for( var i = 0 ; i < len ; i++ ) {
        data.opt_id.push($('.func-opt-row .active').eq(i).data('id'));
      }
      var url = _this.config.update_permission_url ;
      
      $.post( url , data , function( ret ){
        tips( ret.info );
        if ( ret.status ) {
          $('#permission_body').empty();
          $('#permission_modal').modal('hide');
        }
      });
    });
  },
  
  //将下级权限置为可查看
  set_sub_opt_check : function( this_node ){
    var _this_tree = this_node.parent('.func-tree');
    var _sub_func_node = _this_tree.find('.sub-permission .func-node');
    _sub_func_node.each(function() {
      var _this_sub_func_node = $(this);
      $(this).find('.func-opt').each(function() {
        if( $(this).html().indexOf('查看') > 0 ) {
          _this_sub_func_node.find('.func').removeClass('active notall disabled').addClass('notall');
          $(this).removeClass('active notall disabled').addClass('active');
          var _this_sub_func_opt_i = $(this).find('i');
          _this_sub_func_opt_i.removeClass('fa-square-o').addClass('fa-check-square-o');
        }
      });
    });
  },
  
  //将下级权限置为全不选
  set_sub_opt_disabled : function( this_node ){    
    var _this_tree = this_node.parent('.func-tree');
    var _sub_func_node = _this_tree.find('.sub-permission .func-node');
    _sub_func_node.each(function() {
      $(this).find('.func').removeClass('active notall disabled').addClass('disabled');
      $(this).find('.func-opt').removeClass('active notall disabled').addClass('disabled');
      $(this).find('.func-opt > i').removeClass('fa-check-square-o').addClass('fa-square-o');
    });
  },
  
  init_grid: function () {
    var _this = this;
    $('#data_table').TableGrid({
      url: _this.config.read_url,
      select_all : false,
      load_after_init: true,
      pagination : false ,
      param : { mer_id : _this.config.mer_id } ,
      row_style : function( row , index ){
        if ( row.status == 0 ) {
            return 'info';
        }
      }
    });
  },
  
  del_data: function (ids) {
    var _this = this;

    sure.init('确定删除吗？', function () {
      var url = _this.config.delete_url;
      var data = {ids: _this.config.del_id};

      $.post(url, data, function (ret) {
        tips(ret.info);
        if (ret.status) {
          $('#data_table').TableGrid('reload');
        }
      });
    });
  },
  
  init_permission : function(p_data){
    $('.func').addClass('disabled');
    $('.func-opt').addClass('disabled');
    
    for( var i = 0 ; i < p_data.length ; i++ ) {
      $('.func-opt[data-id="'+ p_data[i].opt_id +'"]').removeClass('disabled').addClass('active');
      $('.func-opt[data-id="'+ p_data[i].opt_id +'"]').find('i').removeClass('fa-square-o').addClass('fa-check-square-o');
    }
    
    $('.func-node').each(function(index) {
      var func_id = $(this).data('id');
      
      var total_len = $(this).find('.func-opt').length;
      var active_len = $(this).find('.active').length;
      if ( total_len == active_len ) {
        $(this).find('.func').removeClass('disabled').addClass('active');
      } else if ( total_len > active_len && active_len > 0 ) {
        $(this).find('.func').removeClass('disabled').addClass('notall');
      }
    });
  },
};

var format_rank = function(value , row , index) {
  return Param.rank[ value ] ; 
}

var opt_permission = function( value , row , index ) {
  return '<a class="btn btn-info permission_btn" data-id="'+ row.id +'" href="#"><i class="fa fa-key"></i> 权限</a>';
}






